본문으로 건너뛰기

Q. strict mode를 언제 사용하는지와 동작 예시를 말해 주세요.

🧑🏻‍💻 Answer.


✅ 언제 사용하는지

  • strict mode는 JS 언어의 문법을 보다 엄격히 할 때 사용됩니다.

  • strict mode에서는 기존에는 무시되던 오류들과 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킵니다.

✅ 동작 예시

  1. 암묵적 전역 변수 방지

    // 선언이 생략된 변수는 암묵적으로 var로 선언되어 전역 변수로 동작한다.

    function foo() {
    x = 10;
    }
    foo();

    console.log(x); // 10
    function foo() {
    'use strict';
    x = 10; // ReferenceError: x is not defined
    }

    y = 10;
    console.log(y); // 10

    foo();
    'use strict';

    function foo() {
    x = 10; // ReferenceError: x is not defined
    }

    foo();
  2. delete 명령어 사용 불가

    (function () {
    var x = 1;
    delete x; // x는 프로퍼티가 아닌 변수이므로 delete 가 적용되지 않는다.
    consile.log(x) // 1, 삭제가 되지는 않지만 에러가 발생 하지는 않는다.
    }());
    (function () {
    'use strict';

    var x = 1;
    delete x; //
    // SyntaxError: Delete of an unqualified identifier in strict mode.
    }());
  3. 매개 변수 중복 사용 불가

  • 중복으로 사용된 매개 변수에 대한 에러를 던집니다.
    (function () {
    function foo(x, x) {
    return x + x;
    }
    console.log(foo(1, 2)); // 4, 2로 덮어씌어짐
    }());
    (function () {
    'use strict';

    //SyntaxError: Duplicate parameter name not allowed in this context
    function foo(x, x) {
    return x + x;
    }
    console.log(foo(1, 2));
    }());
  1. eval() 함수의 사용 불가
  • 보안상의 이유로 eval() 함수의 사용이 제한됩니다.
  1. this 바인딩
  • strict mode에서는 함수 내에서 this 키워드가 전역 객체를 참조하지 않고 undefined를 가리킵니다.

  • 이에 따라 this에 의존하는 코드의 수정이 필요합니다.